[HVM][VMX] Clean up vmx hvm interface functions:
authorkfraser@localhost.localdomain <kfraser@localhost.localdomain>
Wed, 2 Aug 2006 08:38:08 +0000 (09:38 +0100)
committerkfraser@localhost.localdomain <kfraser@localhost.localdomain>
Wed, 2 Aug 2006 08:38:08 +0000 (09:38 +0100)
 1) define vmx hvm interface functions static.
 2) setup hvm interface functions only once.

Signed-off-by: Xin Li <xin.b.li@intel.com>
xen/arch/x86/hvm/vmx/vmx.c
xen/include/asm-x86/hvm/vmx/vmcs.h

index f8df7bbcf808596bae0461c138b18c772041469d..66991e0a0e2349615ae98c042e397e644db56ac4 100644 (file)
@@ -477,7 +477,7 @@ static void vmx_ctxt_switch_to(struct vcpu *v)
     vmx_restore_dr(v);
 }
 
-void stop_vmx(void)
+static void stop_vmx(void)
 {
     if (read_cr4() & X86_CR4_VMXE)
         __vmxoff();
@@ -562,7 +562,7 @@ static void fixup_vm86_seg_bases(struct cpu_user_regs *regs)
     BUG_ON(err);
 }
 
-void vmx_load_cpu_guest_regs(struct vcpu *v, struct cpu_user_regs *regs)
+static void vmx_load_cpu_guest_regs(struct vcpu *v, struct cpu_user_regs *regs)
 {
     vmx_vmcs_enter(v);
 
@@ -588,7 +588,7 @@ void vmx_load_cpu_guest_regs(struct vcpu *v, struct cpu_user_regs *regs)
     vmx_vmcs_exit(v);
 }
 
-int vmx_realmode(struct vcpu *v)
+static int vmx_realmode(struct vcpu *v)
 {
     unsigned long rflags;
 
@@ -596,7 +596,7 @@ int vmx_realmode(struct vcpu *v)
     return rflags & X86_EFLAGS_VM;
 }
 
-int vmx_instruction_length(struct vcpu *v)
+static int vmx_instruction_length(struct vcpu *v)
 {
     unsigned long inst_len;
 
@@ -605,7 +605,7 @@ int vmx_instruction_length(struct vcpu *v)
     return inst_len;
 }
 
-unsigned long vmx_get_ctrl_reg(struct vcpu *v, unsigned int num)
+static unsigned long vmx_get_ctrl_reg(struct vcpu *v, unsigned int num)
 {
     switch ( num )
     {
@@ -622,7 +622,7 @@ unsigned long vmx_get_ctrl_reg(struct vcpu *v, unsigned int num)
 }
 
 /* SMP VMX guest support */
-void vmx_init_ap_context(struct vcpu_guest_context *ctxt,
+static void vmx_init_ap_context(struct vcpu_guest_context *ctxt,
                          int vcpuid, int trampoline_vector)
 {
     int i;
@@ -669,6 +669,28 @@ static int check_vmx_controls(u32 ctrls, u32 msr)
     return 1;
 }
 
+/* Setup HVM interfaces */
+static void vmx_setup_hvm_funcs(void)
+{
+    if ( hvm_enabled )
+        return;
+
+    hvm_funcs.disable = stop_vmx;
+
+    hvm_funcs.initialize_guest_resources = vmx_initialize_guest_resources;
+    hvm_funcs.relinquish_guest_resources = vmx_relinquish_guest_resources;
+
+    hvm_funcs.store_cpu_guest_regs = vmx_store_cpu_guest_regs;
+    hvm_funcs.load_cpu_guest_regs = vmx_load_cpu_guest_regs;
+
+    hvm_funcs.realmode = vmx_realmode;
+    hvm_funcs.paging_enabled = vmx_paging_enabled;
+    hvm_funcs.instruction_length = vmx_instruction_length;
+    hvm_funcs.get_guest_ctrl_reg = vmx_get_ctrl_reg;
+
+    hvm_funcs.init_ap_context = vmx_init_ap_context;
+}
+
 static void vmx_init_hypercall_page(struct domain *d, void *hypercall_page)
 {
     char *p;
@@ -755,21 +777,7 @@ int start_vmx(void)
 
     vmx_save_init_msrs();
 
-    /* Setup HVM interfaces */
-    hvm_funcs.disable = stop_vmx;
-
-    hvm_funcs.initialize_guest_resources = vmx_initialize_guest_resources;
-    hvm_funcs.relinquish_guest_resources = vmx_relinquish_guest_resources;
-
-    hvm_funcs.store_cpu_guest_regs = vmx_store_cpu_guest_regs;
-    hvm_funcs.load_cpu_guest_regs = vmx_load_cpu_guest_regs;
-
-    hvm_funcs.realmode = vmx_realmode;
-    hvm_funcs.paging_enabled = vmx_paging_enabled;
-    hvm_funcs.instruction_length = vmx_instruction_length;
-    hvm_funcs.get_guest_ctrl_reg = vmx_get_ctrl_reg;
-
-    hvm_funcs.init_ap_context = vmx_init_ap_context;
+    vmx_setup_hvm_funcs();
 
     hvm_funcs.init_hypercall_page = vmx_init_hypercall_page;
 
index 2b14b7c42073652cfb7b221c28a9b549b3de9a67..2886f51b6d49273c13aad33a77f7146cd230a95e 100644 (file)
@@ -25,7 +25,6 @@
 #include <public/hvm/vmx_assist.h>
 
 extern int start_vmx(void);
-extern void stop_vmx(void);
 extern void vmcs_dump_vcpu(void);
 extern void vmx_init_vmcs_config(void);